var hexcase=0;var b64pad="";var chrsz=8;function hex_md5(s){return binl2hex(core_md5(str2binl(s),s.length*chrsz))} function b64_md5(s){return binl2b64(core_md5(str2binl(s),s.length*chrsz))} function str_md5(s){return binl2str(core_md5(str2binl(s),s.length*chrsz))} function hex_hmac_md5(key,data){return binl2hex(core_hmac_md5(key,data))} function b64_hmac_md5(key,data){return binl2b64(core_hmac_md5(key,data))} function str_hmac_md5(key,data){return binl2str(core_hmac_md5(key,data))} function md5_vm_test() {return hex_md5("abc")=="900150983cd24fb0d6963f7d28e17f72"} function core_md5(x,len) {x[len>>5]|=0x80<<((len)%32);x[(((len+64)>>>9)<<4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(var i=0;i16)bkey=core_md5(bkey,key.length*chrsz);var ipad=Array(16),opad=Array(16);for(var i=0;i<16;i++) {ipad[i]=bkey[i]^0x36363636;opad[i]=bkey[i]^0x5C5C5C5C} var hash=core_md5(ipad.concat(str2binl(data)),512+data.length*chrsz);return core_md5(opad.concat(hash),512+128)} function safe_add(x,y) {var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF)} function bit_rol(num,cnt) {return(num<>>(32-cnt))} function str2binl(str) {var bin=Array();var mask=(1<>5]|=(str.charCodeAt(i/chrsz)&mask)<<(i%32);return bin} function binl2str(bin) {var str="";var mask=(1<>5]>>>(i%32))&mask);return str} function binl2hex(binarray) {var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var str="";for(var i=0;i>2]>>((i%4)*8+4))&0xF)+hex_tab.charAt((binarray[i>>2]>>((i%4)*8))&0xF)} return str} function binl2b64(binarray) {var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var str="";for(var i=0;i>2]>>8*(i%4))&0xFF)<<16)|(((binarray[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)|((binarray[i+2>>2]>>8*((i+2)%4))&0xFF);for(var j=0;j<4;j++) {if(i*8+j*6>binarray.length*32)str+=b64pad;else str+=tab.charAt((triplet>>6*(3-j))&0x3F)}} return str} var hexcase=0;var b64pad="";function hex_sha1(s){return rstr2hex(rstr_sha1(str2rstr_utf8(s)))} function b64_sha1(s){return rstr2b64(rstr_sha1(str2rstr_utf8(s)))} function any_sha1(s,e){return rstr2any(rstr_sha1(str2rstr_utf8(s)),e)} function hex_hmac_sha1(k,d) {return rstr2hex(rstr_hmac_sha1(str2rstr_utf8(k),str2rstr_utf8(d)))} function b64_hmac_sha1(k,d) {return rstr2b64(rstr_hmac_sha1(str2rstr_utf8(k),str2rstr_utf8(d)))} function any_hmac_sha1(k,d,e) {return rstr2any(rstr_hmac_sha1(str2rstr_utf8(k),str2rstr_utf8(d)),e)} function sha1_vm_test() {return hex_sha1("abc").toLowerCase()=="a9993e364706816aba3e25717850c26c9cd0d89d"} function rstr_sha1(s) {return binb2rstr(binb_sha1(rstr2binb(s),s.length*8))} function rstr_hmac_sha1(key,data) {var bkey=rstr2binb(key);if(bkey.length>16)bkey=binb_sha1(bkey,key.length*8);var ipad=Array(16),opad=Array(16);for(var i=0;i<16;i++) {ipad[i]=bkey[i]^0x36363636;opad[i]=bkey[i]^0x5C5C5C5C} var hash=binb_sha1(ipad.concat(rstr2binb(data)),512+data.length*8);return binb2rstr(binb_sha1(opad.concat(hash),512+160))} function rstr2hex(input) {try{hexcase}catch(e){hexcase=0} var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var output="";var x;for(var i=0;i>>4)&0x0F)+hex_tab.charAt(x&0x0F)} return output} function rstr2b64(input) {try{b64pad}catch(e){b64pad=''} var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var output="";var len=input.length;for(var i=0;iinput.length*8)output+=b64pad;else output+=tab.charAt((triplet>>>6*(3-j))&0x3F)}} return output} function rstr2any(input,encoding) {var divisor=encoding.length;var remainders=Array();var i,q,x,quotient;var dividend=Array(Math.ceil(input.length/2));for(i=0;i0) {quotient=Array();x=0;for(i=0;i0||q>0) quotient[quotient.length]=q} remainders[remainders.length]=x;dividend=quotient} var output="";for(i=remainders.length-1;i>=0;i--) output+=encoding.charAt(remainders[i]);var full_length=Math.ceil(input.length*8/(Math.log(encoding.length)/Math.log(2))) for(i=output.length;i>>6)&0x1F),0x80|(x&0x3F));else if(x<=0xFFFF) output+=String.fromCharCode(0xE0|((x>>>12)&0x0F),0x80|((x>>>6)&0x3F),0x80|(x&0x3F));else if(x<=0x1FFFFF) output+=String.fromCharCode(0xF0|((x>>>18)&0x07),0x80|((x>>>12)&0x3F),0x80|((x>>>6)&0x3F),0x80|(x&0x3F))} return output} function str2rstr_utf16le(input) {var output="";for(var i=0;i>>8)&0xFF);return output} function str2rstr_utf16be(input) {var output="";for(var i=0;i>>8)&0xFF,input.charCodeAt(i)&0xFF);return output} function rstr2binb(input) {var output=Array(input.length>>2);for(var i=0;i>5]|=(input.charCodeAt(i/8)&0xFF)<<(24-i%32);return output} function binb2rstr(input) {var output="";for(var i=0;i>5]>>>(24-i%32))&0xFF);return output} function binb_sha1(x,len) {x[len>>5]|=0x80<<(24-len%32);x[((len+64>>9)<<4)+15]=len;var w=Array(80);var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;var e=-1009589776;for(var i=0;i>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF)} function bit_rol(num,cnt) {return(num<>>(32-cnt))}